# 使用node的官方基础镜像版本18.0.0作为构建的基础环境
# 这个镜像包括了Node.js和npm，允许你运行一个Node.js应用
FROM node:18.16.0

# 设置工作目录为/app
# 这意味着接下来的指令将会以/app作为执行上下文
# 这也是你的应用代码将要被复制到的容器内部的目录
WORKDIR /app

# 将宿主机的package.json文件复制到容器的/app目录下
# 这一步是为了利用Docker的层缓存，先复制package.json再安装依赖，
# 这样只要依赖不变，就不需要重新安装，加快构建速度
COPY package.json /app/

# 运行npm安装命令来安装定义在package.json中的所有依赖
# 这里指定了使用一个镜像源https://registry.npmmirror.com，这个源是npm的一个镜像，有时候会比官方源更快
RUN npm install --registry=https://registry.npmmirror.com

# 全局安装pm2进程管理器
# pm2是一个带有负载均衡功能的Node应用的进程管理器
RUN npm install -g pm2 --registry=https://registry.npmmirror.com

# 将宿主机当前目录下的所有文件和目录复制到容器的/app目录下
# 这包括应用的所有代码、资源文件等
COPY ./ /app

# 声明容器运行时监听的端口
# 这是为了文档化的目的，并不会真正打开端口，需要在运行容器时通过-p标志来映射端口
EXPOSE 3000

# 容器启动时执行的命令
# 使用pm2-runtime启动应用，并指定使用生产环境配置文件ecosystem.config.js
CMD ["pm2-runtime", "start", "ecosystem.config.js", "--env", "production"]
